diff --git a/system/libraries/Table.php b/system/libraries/Table.php
index 8d0e11a..1851bf3 100644
--- a/system/libraries/Table.php
+++ b/system/libraries/Table.php
@@ -1,13 +1,13 @@
-<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
  * An open source application development framework for PHP 5.1.6 or newer
  *
  * NOTICE OF LICENSE
- * 
+ *
  * Licensed under the Open Software License version 3.0
- * 
+ *
  * This source file is subject to the Open Software License (OSL 3.0) that is
  * bundled with this package in the files license.txt / license.rst.  It is
  * also available through the world wide web at this URL:
@@ -40,14 +40,14 @@
  */
 class CI_Table {
 
-	var $rows				= array();
-	var $heading			= array();
-	var $auto_heading		= TRUE;
-	var $caption			= NULL;
-	var $template			= NULL;
-	var $newline			= "\n";
-	var $empty_cells		= "";
-	var	$function			= FALSE;
+	public $rows			= array();
+	public $heading			= array();
+	public $auto_heading		= TRUE;
+	public $caption			= NULL;
+	public $template		= NULL;
+	public $newline			= "\n";
+	public $empty_cells		= '';
+	public $function		= FALSE;
 
 	public function __construct()
 	{
@@ -59,11 +59,10 @@
 	/**
 	 * Set the template
 	 *
-	 * @access	public
 	 * @param	array
 	 * @return	void
 	 */
-	function set_template($template)
+	public function set_template($template)
 	{
 		if ( ! is_array($template))
 		{
@@ -80,11 +79,10 @@
 	 *
 	 * Can be passed as an array or discreet params
 	 *
-	 * @access	public
 	 * @param	mixed
 	 * @return	void
 	 */
-	function set_heading()
+	public function set_heading()
 	{
 		$args = func_get_args();
 		$this->heading = $this->_prep_args($args);
@@ -98,14 +96,13 @@
 	 * columns.  This allows a single array with many elements to  be
 	 * displayed in a table that has a fixed column count.
 	 *
-	 * @access	public
 	 * @param	array
 	 * @param	int
 	 * @return	void
 	 */
-	function make_columns($array = array(), $col_limit = 0)
+	public function make_columns($array = array(), $col_limit = 0)
 	{
-		if ( ! is_array($array) OR count($array) == 0)
+		if ( ! is_array($array) OR count($array) === 0)
 		{
 			return FALSE;
 		}
@@ -120,7 +117,7 @@
 		}
 
 		$new = array();
-		while (count($array) > 0)
+		do
 		{
 			$temp = array_splice($array, 0, $col_limit);
 
@@ -134,6 +131,7 @@
 
 			$new[] = $temp;
 		}
+		while (count($array) > 0);
 
 		return $new;
 	}
@@ -145,11 +143,10 @@
 	 *
 	 * Can be passed as an array or discreet params
 	 *
-	 * @access	public
 	 * @param	mixed
 	 * @return	void
 	 */
-	function set_empty($value)
+	public function set_empty($value)
 	{
 		$this->empty_cells = $value;
 	}
@@ -161,11 +158,10 @@
 	 *
 	 * Can be passed as an array or discreet params
 	 *
-	 * @access	public
 	 * @param	mixed
 	 * @return	void
 	 */
-	function add_row()
+	public function add_row()
 	{
 		$args = func_get_args();
 		$this->rows[] = $this->_prep_args($args);
@@ -178,16 +174,15 @@
 	 *
 	 * Ensures a standard associative array format for all cell data
 	 *
-	 * @access	public
 	 * @param	type
 	 * @return	type
 	 */
-	function _prep_args($args)
+	protected function _prep_args($args)
 	{
 		// If there is no $args[0], skip this and treat as an associative array
 		// This can happen if there is only a single key, for example this is passed to table->generate
 		// array(array('foo'=>'bar'))
-		if (isset($args[0]) AND (count($args) == 1 && is_array($args[0])))
+		if (isset($args[0]) AND (count($args) === 1 && is_array($args[0])))
 		{
 			// args sent as indexed array
 			if ( ! isset($args[0]['data']))
@@ -224,11 +219,10 @@
 	/**
 	 * Add a table caption
 	 *
-	 * @access	public
 	 * @param	string
 	 * @return	void
 	 */
-	function set_caption($caption)
+	public function set_caption($caption)
 	{
 		$this->caption = $caption;
 	}
@@ -238,11 +232,10 @@
 	/**
 	 * Generate the table
 	 *
-	 * @access	public
 	 * @param	mixed
 	 * @return	string
 	 */
-	function generate($table_data = NULL)
+	public function generate($table_data = NULL)
 	{
 		// The table data can optionally be passed to this function
 		// either as a database result object or an array
@@ -254,13 +247,13 @@
 			}
 			elseif (is_array($table_data))
 			{
-				$set_heading = (count($this->heading) == 0 AND $this->auto_heading == FALSE) ? FALSE : TRUE;
+				$set_heading = (count($this->heading) === 0 AND $this->auto_heading == FALSE) ? FALSE : TRUE;
 				$this->_set_from_array($table_data, $set_heading);
 			}
 		}
 
 		// Is there anything to display?  No?  Smite them!
-		if (count($this->heading) == 0 AND count($this->rows) == 0)
+		if (count($this->heading) === 0 AND count($this->rows) === 0)
 		{
 			return 'Undefined table data';
 		}
@@ -273,24 +266,18 @@
 
 		// Build the table!
 
-		$out = $this->template['table_open'];
-		$out .= $this->newline;
+		$out = $this->template['table_open'].$this->newline;
 
 		// Add any caption here
 		if ($this->caption)
 		{
-			$out .= $this->newline;
-			$out .= '<caption>' . $this->caption . '</caption>';
-			$out .= $this->newline;
+			$out .= $this->newline.'<caption>'.$this->caption.'</caption>'.$this->newline;
 		}
 
 		// Is there a table heading to display?
 		if (count($this->heading) > 0)
 		{
-			$out .= $this->template['thead_open'];
-			$out .= $this->newline;
-			$out .= $this->template['heading_row_start'];
-			$out .= $this->newline;
+			$out .= $this->template['thead_open'].$this->newline.$this->template['heading_row_start'].$this->newline;
 
 			foreach ($this->heading as $heading)
 			{
@@ -304,22 +291,16 @@
 					}
 				}
 
-				$out .= $temp;
-				$out .= isset($heading['data']) ? $heading['data'] : '';
-				$out .= $this->template['heading_cell_end'];
+				$out .= $temp.(isset($heading['data']) ? $heading['data'] : '').$this->template['heading_cell_end'];
 			}
 
-			$out .= $this->template['heading_row_end'];
-			$out .= $this->newline;
-			$out .= $this->template['thead_close'];
-			$out .= $this->newline;
+			$out .= $this->template['heading_row_end'].$this->newline.$this->template['thead_close'].$this->newline;
 		}
 
 		// Build the table rows
 		if (count($this->rows) > 0)
 		{
-			$out .= $this->template['tbody_open'];
-			$out .= $this->newline;
+			$out .= $this->template['tbody_open'].$this->newline;
 
 			$i = 1;
 			foreach ($this->rows as $row)
@@ -332,8 +313,7 @@
 				// We use modulus to alternate the row colors
 				$name = (fmod($i++, 2)) ? '' : 'alt_';
 
-				$out .= $this->template['row_'.$name.'start'];
-				$out .= $this->newline;
+				$out .= $this->template['row_'.$name.'start'].$this->newline;
 
 				foreach ($row as $cell)
 				{
@@ -341,7 +321,7 @@
 
 					foreach ($cell as $key => $val)
 					{
-						if ($key != 'data')
+						if ($key !== 'data')
 						{
 							$temp = str_replace('<td', "<td $key='$val'", $temp);
 						}
@@ -369,12 +349,10 @@
 					$out .= $this->template['cell_'.$name.'end'];
 				}
 
-				$out .= $this->template['row_'.$name.'end'];
-				$out .= $this->newline;
+				$out .= $this->template['row_'.$name.'end'].$this->newline;
 			}
 
-			$out .= $this->template['tbody_close'];
-			$out .= $this->newline;
+			$out .= $this->template['tbody_close'].$this->newline;
 		}
 
 		$out .= $this->template['table_close'];
@@ -390,10 +368,9 @@
 	/**
 	 * Clears the table arrays.  Useful if multiple tables are being generated
 	 *
-	 * @access	public
 	 * @return	void
 	 */
-	function clear()
+	public function clear()
 	{
 		$this->rows				= array();
 		$this->heading			= array();
@@ -405,11 +382,10 @@
 	/**
 	 * Set table data from a database result object
 	 *
-	 * @access	public
 	 * @param	object
 	 * @return	void
 	 */
-	function _set_from_object($query)
+	protected function _set_from_object($query)
 	{
 		if ( ! is_object($query))
 		{
@@ -417,7 +393,7 @@
 		}
 
 		// First generate the headings from the table column names
-		if (count($this->heading) == 0)
+		if (count($this->heading) === 0)
 		{
 			if ( ! method_exists($query, 'list_fields'))
 			{
@@ -443,13 +419,12 @@
 	/**
 	 * Set table data from an array
 	 *
-	 * @access	public
 	 * @param	array
 	 * @return	void
 	 */
-	function _set_from_array($data, $set_heading = TRUE)
+	protected function _set_from_array($data, $set_heading = TRUE)
 	{
-		if ( ! is_array($data) OR count($data) == 0)
+		if ( ! is_array($data) OR count($data) === 0)
 		{
 			return FALSE;
 		}
@@ -458,7 +433,7 @@
 		foreach ($data as $row)
 		{
 			// If a heading hasn't already been set we'll use the first row of the array as the heading
-			if ($i == 0 AND count($data) > 1 AND count($this->heading) == 0 AND $set_heading == TRUE)
+			if ($i++ === 0 AND count($data) > 1 AND count($this->heading) === 0 AND $set_heading == TRUE)
 			{
 				$this->heading = $this->_prep_args($row);
 			}
@@ -466,8 +441,6 @@
 			{
 				$this->rows[] = $this->_prep_args($row);
 			}
-
-			$i++;
 		}
 	}
 
@@ -476,10 +449,9 @@
 	/**
 	 * Compile Template
 	 *
-	 * @access	private
 	 * @return	void
 	 */
-	function _compile_template()
+	protected function _compile_template()
 	{
 		if ($this->template == NULL)
 		{
@@ -502,10 +474,9 @@
 	/**
 	 * Default Template
 	 *
-	 * @access	private
 	 * @return	void
 	 */
-	function _default_template()
+	protected function _default_template()
 	{
 		return  array (
 						'table_open'			=> '<table border="0" cellpadding="4" cellspacing="0">',
@@ -538,6 +509,5 @@
 
 }
 
-
 /* End of file Table.php */
 /* Location: ./system/libraries/Table.php */
